// 校验库完整测试
import { 
  // 字符串相关
  isAlpha, isAlphanumeric, isAscii, isBase64, isBoolean, isEmail,
  isLowercase, isUppercase, isLength, isChineseOnly, hasChinese,
  isAccount, isChineseEnglishNumberDash, isSlug,
  
  // 数字相关
  isInt, isFloat, isNumeric, isPositiveInt, isNegativeInt, isNonNegativeInt,
  isPositiveNumber, isNegativeNumber, isDecimal, isOneDecimal, isTwoDecimal,
  isThreeDecimal, isTwoDigit,
  
  // 网络相关
  isIP, isIPv4, isIPv6, isURL, isDomain, isPort, isMACAddress,
  
  // 联系方式相关
  isMobilePhone, isPhone, isPhoneOrTel,
  
  // 身份信息相关
  isIdentityCard, isCreditCard, isPassportNumber,
  
  // 金额相关
  isAmount, isAmountTwoDecimal, isAmountThreeDecimal, isPercentage,
  isDiscount, isTaxRate, isPrice,
  
  // 地理位置相关
  isLatLong, isLongitude, isLatitude, isPostalCode,
  
  // 业务相关
  isGbCode, isOrderNumber, isTransactionId, isBankCard, isPayPassword,
  isVerificationCode, isProductCode, isStockQuantity,
  
  // 高级校验
  isJSON, isDate, isISO8601, isTime, isUUID, isHash, isJWT, isMongoId, isStrongPassword
} from '../dist/index.esm.js'

// 测试统计
let totalTests = 0
let passedTests = 0
let failedTests = 0

// 测试辅助函数
function test(name, testFn) {
  totalTests++
  try {
    testFn()
    console.log(`✅ ${name}`)
    passedTests++
  } catch (error) {
    console.log(`❌ ${name}: ${error.message}`)
    failedTests++
  }
}

function assert(condition, message) {
  if (!condition) {
    throw new Error(message || 'Assertion failed')
  }
}

console.log('🧪 校验库完整测试\n')

// 字符串相关测试
console.log('📝 字符串相关校验')
test('isAlpha - 纯英文字母', () => {
  assert(isAlpha('Hello'), '应该通过')
  assert(!isAlpha('Hello123'), '应该失败')
  assert(isAlpha(''), '空值应该通过')
})

test('isAlphanumeric - 字母数字', () => {
  assert(isAlphanumeric('Hello123'), '应该通过')
  assert(!isAlphanumeric('Hello-123'), '应该失败')
  assert(isAlphanumeric(''), '空值应该通过')
})

test('isEmail - 邮箱', () => {
  assert(isEmail('test@example.com'), '应该通过')
  assert(!isEmail('invalid-email'), '应该失败')
  assert(isEmail(''), '空值应该通过')
})

test('isLength - 字符串长度', () => {
  assert(isLength('Hello', { min: 3, max: 10 }), '应该通过')
  assert(!isLength('Hi', { min: 3, max: 10 }), '应该失败')
  assert(isLength(''), '空值应该通过')
})

// 数字相关测试
console.log('\n🔢 数字相关校验')
test('isInt - 整数', () => {
  assert(isInt('123'), '应该通过')
  assert(isInt('-123'), '应该通过')
  assert(!isInt('12.3'), '应该失败')
  assert(isInt(''), '空值应该通过')
})

test('isDecimal - 通用小数位数', () => {
  assert(isDecimal('3.14', 2), '应该通过')
  assert(!isDecimal('3.141', 2), '应该失败')
  assert(isDecimal('3.141', 3), '应该通过')
  assert(isDecimal(''), '空值应该通过')
})

test('isTwoDecimal - 2位小数', () => {
  assert(isTwoDecimal('3.14'), '应该通过')
  assert(!isTwoDecimal('3.141'), '应该失败')
  assert(isTwoDecimal(''), '空值应该通过')
})

// 网络相关测试
console.log('\n🌐 网络相关校验')
test('isIP - IP地址', () => {
  assert(isIP('192.168.1.1'), '应该通过')
  assert(!isIP('256.1.1.1'), '应该失败')
  assert(isIP(''), '空值应该通过')
})

test('isURL - URL', () => {
  assert(isURL('https://www.example.com'), '应该通过')
  assert(!isURL('invalid-url'), '应该失败')
  assert(isURL(''), '空值应该通过')
})

// 联系方式相关测试
console.log('\n📞 联系方式相关校验')
test('isMobilePhone - 手机号', () => {
  assert(isMobilePhone('13812345678'), '应该通过')
  assert(!isMobilePhone('12812345678'), '应该失败')
  assert(isMobilePhone(''), '空值应该通过')
})

// 金额相关测试
console.log('\n💰 金额相关校验')
test('isAmount - 通用金额', () => {
  assert(isAmount('100.50', 2), '应该通过')
  assert(!isAmount('100.500', 2), '应该失败')
  assert(isAmount('100.500', 3), '应该通过')
  assert(isAmount(''), '空值应该通过')
})

test('isPercentage - 百分比', () => {
  assert(isPercentage('50.5'), '应该通过')
  assert(!isPercentage('101'), '应该失败')
  assert(isPercentage(''), '空值应该通过')
})

// 业务相关测试
console.log('\n💼 业务相关校验')
test('isOrderNumber - 订单号', () => {
  assert(isOrderNumber('ORD123456'), '应该通过')
  assert(!isOrderNumber('ORD'), '应该失败')
  assert(isOrderNumber(''), '空值应该通过')
})

// 高级校验测试
console.log('\n🚀 高级校验')
test('isJSON - JSON格式', () => {
  assert(isJSON('{"name":"test"}'), '应该通过')
  assert(!isJSON('{name:test}'), '应该失败')
  assert(isJSON(''), '空值应该通过')
})

test('isUUID - UUID格式', () => {
  assert(isUUID('550e8400-e29b-41d4-a716-446655440000'), '应该通过')
  assert(!isUUID('invalid-uuid'), '应该失败')
  assert(isUUID(''), '空值应该通过')
})

// 打印测试结果
console.log('\n' + '='.repeat(60))
console.log('📊 测试结果摘要')
console.log('='.repeat(60))
console.log(`总测试数: ${totalTests}`)
console.log(`通过: ${passedTests} ✅`)
console.log(`失败: ${failedTests} ❌`)
console.log(`成功率: ${((passedTests / totalTests) * 100).toFixed(1)}%`)
console.log('='.repeat(60))

if (failedTests === 0) {
  console.log('🎉 所有测试通过！校验库功能正常')
} else {
  console.log('⚠️  有测试失败，请检查上述错误信息')
}